﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Shapes;
using VRA.Dto;
using VRA.BusinessLayer;

namespace ViewRidgeAssistant
{
    /// <summary>
    /// Логика взаимодействия для AddCustomerWindow.xaml
    /// </summary>
    public partial class AddCustomerWindow : Window
    {
        private int _id;

        public void Load(CustomerDto Customer)
        {
           
            if (Customer == null)
            {
                return;
            }

            _id = Customer.Id;

            tbName.Text = Customer.Name;
            tbE_mail.Text = Customer.Email;
            tbAreaCode.Text = Customer.AreaCode;
            tbTelephone.Text = Customer.PhoneNumber;
            tbStreet.Text = Customer.Street;
            tbCity.Text = Customer.City;
            tbRegion.Text = Customer.Region;
            tbZip.Text = Customer.ZipPostalCode;
            tbCountry.Text = Customer.Country;
            tbHouse.Text = Customer.HouseNumber;
        }

        public AddCustomerWindow()
        {
            InitializeComponent();
        }

        private void btnCancel_Click(object sender, RoutedEventArgs e)
        {
            this.Close();
        }

        private void btnSave_Click(object sender, RoutedEventArgs e)
        {
            CustomerDto Customer = new CustomerDto();

            if(string.IsNullOrEmpty(tbName.Text))
            {
                MessageBox.Show("Имя клиента должно быть заполнено!"); 
                return;
            }

            Customer.Name = tbName.Text;

            if (string.IsNullOrEmpty(tbE_mail.Text))
            {
                MessageBox.Show("Электронная почта клиента должна быть указана!"); 
                return;
            }

                      
            Customer.Email = tbE_mail.Text;

         uint zip;
         if (!uint.TryParse(this.tbZip.Text,out zip))
         {
             MessageBox.Show("Почтовый индекс введен некорректно!"); return;
         }
        
         if (zip<100000 || zip>999999)
         {
                 MessageBox.Show("Почтовый индекс должен быть шестизначным числом!"); return;
         }
         Customer.ZipPostalCode = tbZip.Text;
            
            if (string.IsNullOrEmpty(this.tbCountry.Text))
            {
                MessageBox.Show("Введите страну клиента!"); return;
            }
            Customer.Country = tbCountry.Text;

            if (string.IsNullOrEmpty(this.tbCity.Text))
            {
                MessageBox.Show("Введите город клиента!"); return;
            }
            Customer.City = tbCity.Text;

            if (string.IsNullOrEmpty(this.tbStreet.Text))
            {
                MessageBox.Show("Введите улицу, на которой живет клиент"); return;
            }
            Customer.Street = tbStreet.Text;
            
            int houseNum;

            if (!int.TryParse(this.tbHouse.Text, out houseNum ))
            {
                MessageBox.Show("Ошибка формата ввода дома клиента"); return;
            }
            Customer.HouseNumber = tbHouse.Text;
            
            Customer.Region = tbRegion.Text;

            int AreaCode;
            if (!int.TryParse(this.tbAreaCode.Text,out AreaCode))
            {
                MessageBox.Show("Введите код региона!"); return;
            }
            if (AreaCode>999)
            {
                MessageBox.Show("Ошибка формата ввода кода региона"); return;
            }
            Customer.AreaCode = tbAreaCode.Text;

            if (string.IsNullOrEmpty(this.tbTelephone.Text))
            {
                MessageBox.Show("Телефон клиента должен быть указан!"); return;
                
            }
            Customer.PhoneNumber = tbTelephone.Text;

            ICustomerProcess CustomerProcess = ProcessFactory.GetCustomerProcess();

            if (_id == 0)
            {
                CustomerProcess.Add(Customer);
            }

            else
            {
                Customer.Id = _id;
                CustomerProcess.Update(Customer);
            }

            this.Close();
        }
    }
}
